package main

import (
	"fmt"
	"iptv_server/v3/src/controller"
	"iptv_server/v3/src/database"
	"iptv_server/v3/src/models"
	"iptv_server/v3/src/settings"
	"iptv_server/v3/src/utils"
	"os"
	"path"
	"strings"

	walker_man "iptv_server/v3/wallk/src"
)

// "gorm.io/driver/sqlite"

func initLog() {

}

// func initDB() {
// 	dsn := "host=server.lan dbname=iptvserver user=postgres password=123456 port=15433 sslmode=disable TimeZone=Asia/Shanghai"
// 	if db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{
// 		DisableForeignKeyConstraintWhenMigrating: true,
// 	}); err != nil {
// 		fmt.Printf("err: %v\n", err)
// 		panic(err)
// 	} else {
// 		database = db
// 	}
// 	database.AutoMigrate(&User{}, &XXXX{})
// 	// 连接数据库
// 	// db, err := gorm.Open(sqlite.Open("example.db"), &gorm.Config{})
// 	// Mysql.Open("user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local")

// }

func init() {

}

func initALL() {

	// configs
	// database

	settings.SiteDomain = utils.GetEnv("ROOTURL", "http://v3.tv.server.lan:19999") // todo
	db_dbname := utils.GetEnv("DB_DATABASENAME", "iptvserver")                     //todo
	db_host := utils.GetEnv("DB_HOST", "v3.tv.server.lan")

	db_port := utils.GetEnv("DB_PORT", "15433") //5432
	db_user := utils.GetEnv("DB_USER", "postgres")
	db_password := utils.GetEnv("DB_PASSWORD", "123456")

	database.InitDatabase(db_host, db_port, db_dbname, db_user, db_password)

	// init models
	models.InitModels(database.DB)

	// start service

}

func GenDB_Data() {
	if len(os.Args) > 1 {
		if strings.ToLower(os.Args[1]) == "initdb" {
			walker_man.Run(path.Join(settings.Dir_StaticFile, settings.Dir_Videos))
		}
	}
}

// func proxyServer() {
// 	mux := http.NewServeMux()
// 	proxy.ProxyHandle(mux)

// 	srv := http.Server{
// 		Addr:    "0.0.0.0:30000",
// 		Handler: mux,
// 	}
// 	err := srv.ListenAndServe()
// 	fmt.Printf("err: %v\n", err)
// }

func main() {
	initALL()

	GenDB_Data()

	//0.0.0.0
	addr := fmt.Sprintf(":%d", settings.SitePort)
	controller.New_V3Handlers()

	// go proxyServer()

	controller.Run(addr)
	// controller.(addr)
	// r.

}
